#include <iostream>
#include <type_traits>
struct A {
  void member(){};
};
int main() {
  std::cout << std::boolalpha;
  std::cout << "is member = " << std::is_member_object_pointer<int(A::*)>::value
            << "\n"; // true
  std::cout << "is member = "
            << std::is_member_object_pointer<int (A::*)()>::value
            << "\n"; // false
  std::cout << "is member functor= "
            << std::is_member_function_pointer<decltype(&A::member)>::value
            << "\n"; // true
}
